package de.digisalt.dsnesds.editors.projectmeta.operations;

import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.operations.IUndoContext;
import org.eclipse.core.commands.operations.IUndoableOperation;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;

import de.digisalt.dsnesds.editors.projectmeta.model.Model;

public class ChangeGameVersionOperation implements IUndoableOperation
{

	private final String	msg;
	private final int			newValue;
	private final Model		model;
	private final int			previousVersion;

	public ChangeGameVersionOperation(String msg, Model model, int newValue)
	{
		this.msg = msg;
		this.model = model;
		this.newValue = newValue;
		this.previousVersion = model.getVersion();
	}

	@Override
	public void addContext(IUndoContext context)
	{
		// TODO Auto-generated method stub

	}

	@Override
	public boolean canExecute()
	{
		return true;
	}

	@Override
	public boolean canRedo()
	{
		return true;
	}

	@Override
	public boolean canUndo()
	{
		return true;
	}

	@Override
	public void dispose()
	{
		// TODO Auto-generated method stub

	}

	@Override
	public IStatus execute(IProgressMonitor monitor, IAdaptable info)
			throws ExecutionException
	{
		model.setVersion(newValue);
		return Status.OK_STATUS;
	}

	@Override
	public IUndoContext[] getContexts()
	{
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getLabel()
	{
		return msg;
	}

	@Override
	public boolean hasContext(IUndoContext context)
	{
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public IStatus redo(IProgressMonitor monitor, IAdaptable info)
			throws ExecutionException
	{
		model.setVersion(newValue);
		return Status.OK_STATUS;
	}

	@Override
	public void removeContext(IUndoContext context)
	{
		// TODO Auto-generated method stub

	}

	@Override
	public IStatus undo(IProgressMonitor monitor, IAdaptable info)
			throws ExecutionException
	{
		model.setVersion(previousVersion);
		return Status.OK_STATUS;
	}

}
